package view.commonview;

import java.awt.Color;
import java.awt.Font;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JToolBar;
import controller.commoncontroller.MoveViewportListener;
import controller.commoncontroller.SelectionListener;
import controller.commoncontroller.ZoomInListener;
import controller.commoncontroller.ZoomOutListener;
import view.UtilityConstants;

/**
 * <b>Erbt:</b> <code>JToolbar</code> <br>
 * <b>Funktion:</b> Repraesentation der Anzeigetoolbar <br>
 * <br>
 * Toolbar mit Buttons zur Veraenderung der Darstellung und Bearbeitung der
 * Schaltung im Simulations- bzw. Bearbeitungsbereich.
 * 
 * @author Team Locsi
 * 
 */
@SuppressWarnings("serial")
public class ToolBar extends JToolBar {

	private JButton select = new JButton(new ImageIcon(getClass().getClassLoader().getResource(
			UtilityConstants.ICON_PATH + "maus.png")));
	private JButton move = new JButton(new ImageIcon(getClass().getClassLoader().getResource(UtilityConstants.ICON_PATH
			+ "movec.png")));
	private JButton inc = new JButton(new ImageIcon(getClass().getClassLoader().getResource(UtilityConstants.ICON_PATH
			+ "lupe1.png")));
	private JButton dec = new JButton(new ImageIcon(getClass().getClassLoader().getResource(UtilityConstants.ICON_PATH
			+ "lupe1-.png")));
	private JButton[] buttons = { select, move };
	private ButtonValues currentMode;
	private JLabel actZoomLabel = new JLabel(" 100 %");
	private Color selectedColor = new Color(255, 204, 102);

	/**
	 * Dieser Konstruktor erzeugt ein <code>ToolBar</code>-Objekt.
	 */
	public ToolBar() {
		super(JToolBar.VERTICAL);
		currentMode = ButtonValues.SELECTION_MODE;
		select.setBackground(selectedColor);
		select.addActionListener(new SelectionListener(this));
		actZoomLabel.setFont(new Font(actZoomLabel.getFont().getFontName(),
				Font.PLAIN, 12));
		this.add(select);
		move.addActionListener(new MoveViewportListener(this));
		this.add(move);
		this.add(inc);
		this.add(dec);
		this.add(Box.createVerticalStrut(10));
		this.add(actZoomLabel);
	}

	/**
	 * Diese Methode setzt den aktuellen Modus, der Einfluss auf das Verhalten
	 * der Mausaktion nimmt.
	 * 
	 * @param currentMode
	 *            <code>ButtonValues</code> - Modus
	 */
	public void setCurrentMode(ButtonValues currentMode) {
		if (currentMode != null) {
			this.currentMode = currentMode;

			// hintergrundfarbe der buttons wird zurueckgesetzt
			for (int i = 0; i < buttons.length; i++) {
				buttons[i].setBackground(null);
			}

			// angeklickter button wird farbig hinterlegt
			switch (currentMode) {

			case SELECTION_MODE:
				select.setBackground(selectedColor);
				break;

			case MOVE_MODE:
				move.setBackground(selectedColor);
				break;

			default:
				break;
			}
		}
	}

	/**
	 * Diese Methode ermoeglicht den aktuellen Modus abzufragen.
	 * 
	 * @return <code>ButtonValues</code> - den aktuellen Modus
	 */
	public ButtonValues getCurrentMode() {
		return currentMode;
	}

	/**
	 * Methode setZoomFactorLabel - Setzt entsprechend dem aktuellen ZoomFaktor
	 * die ZoomFaktor-Anzeige
	 * 
	 * @param zoomFactor <code>double</code> - 
	 *            neuer ZoomFaktor
	 */
	public void setZoomFactorLabel(double zoomFactor) {
		String puff = " ";
		if (zoomFactor < 1) {
			puff = "  ";
		}
		this.actZoomLabel.setText(puff + Math.round(zoomFactor * 100) + " %");
	}

	/**
	 * Setzt auf die beiden Buttons zum Vergroessern bzw Verkleinern die
	 * enstprechenden Listener
	 * 
	 * @param tabs
	 *            <code>TabbedPane</code> - Referenz auf das
	 *            <code>TabbedPane</code>
	 */
	public void setTabbedPane(TabbedPane tabs) {
		inc.addActionListener(new ZoomInListener(tabs));
		dec.addActionListener(new ZoomOutListener(tabs));
	}
}